Parameter Range Scaling

Since Soundweb London third-party control messages always use a signed 32-bit integer for the data value, conversions are required from human-readable floating-point values to 32-bit fixed-point values. These conversions are designed to increase control precision and improve the feel of user interfaces. Formulas are given below for converting human-readable values to and from device values.

 

 

Binary

Binary values are either 0 or 1, where 0 means false, off, or disabled, and 1 means true, on, or enabled.

 

 

Delay

Delay times are specified in samples at 96kHz. The delay processing object uses this data type, as do the delays within a crossover object.

 

Conversion to Device

ValueToSend = (milliseconds * 96000) / 1000
                                

 

 

Conversion from Device

milliseconds = (ReceivedValue * 1000) / 96000
                                

 

 

Discrete

Discrete values are integer values sent to the device without any scaling.

Examples:

  • Input card gain

  • Crossover filter type

  • Parametric filter slope

  • Parametric filter type

  • Gain object phase

  • Expander ratio

  • High pass filter type

 

 

Gain

This scale is used for gains. It is designed to give a natural feel to graphical faders linearly mapped to the scale's range. A linear range between -10dB and +10dB gives added detail around 0dB, while a logarithmic range from -80dB to -10dB gives a pleasing falloff toward silence. The following graph illustrates this nicely. The X axis is the value sent to the device. The Y axis is the corresponding level in dB.

Image:gain graph small.png

 

Conversion to Device

Conversion from dB to device:

If the value is greater than or equal to -10dB:

ValueToSend = dBValue * 10000
                                

If the value is less than -10dB, then the formula is:

ValueToSend = -Log10(-dBValue / 10)) * 200000 – 100000
                                

 

Conversion from device

Conversion from device to dB:

If the value is greater than or equal to -100000:

dBValue = ReceivedValue / 10000
                                

If the value is less than -100000:

dBValue = -10 * (10 ^ ((ReceivedValue + 100000) / -200000))
                                

where ^ is the exponentiation operator.

 

 

Log

Frequency and time controls on filters and dynamics processors use a logarithmic scale.

 
Frequency values are specified in Hz.

Examples:

  • High and low pass filter frequencies

  • Parametric EQ filter frequencies

  • Crossover frequency

 
Speed is specified in milliseconds.

Examples:

  • Compressor attack

  • Compressor release

 

Conversion to Device

ValueToSend = Log10( Value ) * 1000000
                                

 

Conversion from Device

Value = 10 ^ (ReceivedValue / 1000000)
                                

where ^ is the exponentiation operator.

 

 

Scalar

The Scalar data type uses a decimal fixed-point encoding. Floating-point values are multiplied by 10000 to allow detailed control.

Examples:

  • Meter reference

  • Leveller threshold

  • Parametric filter boost/cut

  • Compressor threshold

  • Automixer slope

  • Parametric filter width

  • Mixer pan

  • Graphic EQ selectivity

 

Conversion to Device

ValueToSend = Value * 10000
                                

 

Conversion from Device

Value = ReceivedValue / 10000
                                

 

 

DI_SETSVPERCENT and DI_BUMPSVPERCENT

The DI_SETSVPERCENT and DI_BUMPSVPERCENT messages use a 16.16 fixed-point format. The value of the control as a percentage of its total range (i.e. 0 to 100) is multiplied by 65536 to allow for fractions of a percent. The accepted range of values is 0 to 6553600 for DI_SETSVPERCENT, -6553600 to 6553600 for DI_BUMPSVPERCENT.

DI_SUBSCRUBESVPERCENT, DI_SETSVPERCENT, DI_BUMPSVPERCENT, and DI_UNSUBSCRIBESVPERCENT can be used on any control.

 

Conversion to Device

ValueToSend = PercentageValue * 65536
                                

 

Conversion from Device

PercentageValue = ValueReceived / 65536
                                

 

Example Values

10% = 655360 ( 0x00 0x0A 0x00 0x00 )
                                12.5%= 819200 ( 0x00 0x0C 0x80 0x00 )
                                50% = 3276800 ( 0x00 0x32 0x00 0x00 )
                                100%= 6553600( 0x00 0x64 0x00 0x00 )
                                -10%= -655360( 0xFF 0xF6 0x00 0x00 )
                                -12.5%= -819200( 0xFF 0xF3 0x80 0x00 )